#  实验一：基本控制结构的应用

## 问题3：水仙花数
水仙花数是指一个$N$位正整数（$N≥3$），它的每个位上的数字的$N$次幂之和等于它本身。例如：$153=1^3+5^3+3^3$
 。 本题要求编写程序,计算所有N位水仙花数。

输入格式:
输入在一行中给出一个正整数$N$（$3≤N≤7$）。
### 1.问题陈述

根据一个算法来计算所有$N$位水仙花数


### 2.输入输出信息

- 输入：一个正整数$N$（$3≤N≤7$）
- 输出：按递增顺序输出所有N位水仙花数，每个数字占一行。

输入样例：
```
3
```
输出样例:
```
153
370
371
407
```
结尾无空行


### 3.手动演算示例

输入,$N=3$,输出结果：
```
153
370
371
407
```

### 4.算法设计
算法描述：
```
I:输入N
P:求所有N位水仙花数
O:所有N位水仙花数
```


进一步细化：
```
Input N

FOR EACH N 位数 i DO
    IF i 是 N位水仙花数     THEN
   Print   i
    END IF
END FOR
```


再次细化：
```
Input N
FOR i = 10^{N-1} TO 10^N-1 DO
    //计算 i 的各位数字N次幂之和 sum
    a=i / 1          %10
    b= i / 10        %10 
    c = i / 100      %10
    d = i / 1000     %10
    e = i / 10000    %10
    f = i / 100000   %10
    g = i / 1000000  %10

sum = pow(a,N) + pow(b,N) + ...... + pow（g，N）

    //如果i是N位水仙花数则输出之
    IF i=sum   THEN  //i 是N 位水仙花数
       Print i
  END IF
END FOR
```c
#include<stdio.h>
#include <math.h>

int main(void)
{
  int N,i,a,b,c,d,e,f,g,sum;
int p[10];


scanf("%d",&N);
p[0] = 0;
p[0] = 1;
p[1] = 1;
p[2] = pow(2,N);
p[3] = pow(3,N);
p[4] = pow(4,N);
p[5] = pow(5,N);
p[6] = pow(6,N);
p[7] = pow(7,N);
p[8] = pow(8,N);
p[9] = pow(9,N);


for(i = pow(10,N-1); i < pow(10,N); i++){
    a=i / 1          %10
    b= i / 10        %10 
    c = i / 100      %10
    d = i / 1000     %10
    e = i / 10000    %10
    f = i / 100000   %10
    g = i / 1000000  %10

sum = p[a] + p[b] + p[c] + p[d] + p[e] + p[f] + p[g];




//sum = pow(a,N) + pow(b,N) + pow(c,N) + pow(d,N) + pow(e,N) + pow(f,N) + pow(g,N);
    if (i==sum)
  printf("%d\n",i);
}
    return 0;
}
```


### 5.测试

### 总结

输出格式:
按递增顺序输出所有$N$位水仙花数，每个数字占一行。

输入样例:
3
结尾无空行
输出样例:
153
370
371
407
结尾无空行